﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WebService;
using Fabrica10;
using Database;

namespace Tests
{
    class TesteCRUDrh
    {
        //atenção a tabela de departamentos já deve estar populado!

        public void CRUDrh()
        {

           // InicialiarBD();

             using (var sc = new Fabrica10ServiceReference.Fabrica10SoapClient())
            {

                //criação do médico
                Funcionario f1 = new Funcionario();
                f1.IdDepartamento = 1;
                f1.Nome = "Médico1";
                f1.CPF = "CpfMedico1";
                f1.Endereco = "EnderecoMedico1";
                f1.Cidade = "CidadeMedico1";
                f1.Estado = "EstadoMedico1";
                f1.Telefone1 = "Telefone1Medico1";
                f1.Telefone2 = "Telefone2Medico1";
                f1.RG = "RgMedico1";
                f1.SalarioHora = 10;
                f1.TipoFuncionario = 0;
                f1.DataCadastro = DateTime.Now;
                f1.Ativo = true;

                SerializedMedico funcionario1 = new SerializedMedico(f1);

                //Cadastro de médico
                sc.CadastrarMedico(1, "Médico1", "CpfMedico1", "EnderecoMedico1", "CidadeMedico1", "EstadoMedico1", "Telefone1Medico1", "Telefone2Medico1", "RgMedico1", 10);

                //Listar médico cadastrado
                var listaMedicos = sc.VisualizarMedicos();
                if (listaMedicos.Last().Nome == "Médico1" &&
                    listaMedicos.Last().IdDepartamento == 1 &&
                    listaMedicos.Last().CPF == "CpfMedico1" &&
                    listaMedicos.Last().Endereco == "EnderecoMedico1" &&
                    listaMedicos.Last().Cidade == "CidadeMedico1" &&
                    listaMedicos.Last().Estado == "EstadoMedico1" &&
                    listaMedicos.Last().Telefone1 == "Telefone1Medico1" &&
                    listaMedicos.Last().Telefone2 == "Telefone2Medico1" &&
                    listaMedicos.Last().RG == "RgMedico1" &&
                    listaMedicos.Last().SalarioHora == 10 &&
                    listaMedicos.Last().Ativo == true)
                {
                    Console.WriteLine("Testando cadastrar médico - Método CadastrarMédico()... OK");
                    Console.WriteLine("Testando listagem de médico - Método VisualizarMédicos()... OK");
                }
                else {
                    Console.WriteLine("ERRO: Método CadastrarMédico()");
                    Console.WriteLine("ERRO: Método VisualizarMédicos()");
                }

                 //Atualizar médico
                sc.AtualizarFuncionario(listaMedicos.Last().Id, 1, "Médico1Atualizado", "CpfMedico1Atualizado", "EnderecoMedico1Atualizado", "CidadeMedico1Atualizado", "EstadoMedico1Atualizado", "Telefone1Medico1Atualizado", "Telefone2Medico1Atualizado", "RgMedico1Atualizado", 10, "sim");
                listaMedicos = sc.VisualizarMedicos();

                if (listaMedicos.Last().Nome == "Médico1Atualizado" &&
                   listaMedicos.Last().IdDepartamento == 1 &&
                   listaMedicos.Last().CPF == "CpfMedico1Atualizado" &&
                   listaMedicos.Last().Endereco == "EnderecoMedico1Atualizado" &&
                   listaMedicos.Last().Cidade == "CidadeMedico1Atualizado" &&
                   listaMedicos.Last().Estado == "EstadoMedico1Atualizado" &&
                   listaMedicos.Last().Telefone1 == "Telefone1Medico1Atualizado" &&
                   listaMedicos.Last().Telefone2 == "Telefone2Medico1Atualizado" &&
                   listaMedicos.Last().RG == "RgMedico1Atualizado" &&
                   listaMedicos.Last().SalarioHora == 10 &&
                   listaMedicos.Last().Ativo == true)
                {
                    Console.WriteLine("Testando atualizar médico, funcionário, fisioterapeuta - Método AtualizarFuncionario()... OK");
                }
                else
                {
                    Console.WriteLine("ERRO: Método AtualizarFuncionario()");
                }

                 //Desativar Funcionario
                sc.DesativarFuncionario(listaMedicos.Last().Id);
                if (sc.GetFuncionario(listaMedicos.Last().Id).Ativo == false)
                {
                    Console.WriteLine("Testando get funcionário - Método GetFuncionario()... OK");
                    Console.WriteLine("Testando desativar funcionário - Método DesativarFuncionario()... OK");
                }
                else
                    Console.WriteLine("ERRO: Método DesativarFuncionario()");


                //criação do fisioterapeuta
                Funcionario f2 = new Funcionario();
                f2.IdDepartamento = 1;
                f2.Nome = "Fisioterapeuta1";
                f2.CPF = "CpfFisioterapeuta1";
                f2.Endereco = "EnderecoFisioterapeuta1";
                f2.Cidade = "CidadeFisioterapeuta1";
                f2.Estado = "EstadoFisioterapeuta1";
                f2.Telefone1 = "Telefone1Fisioterapeuta1";
                f2.Telefone2 = "Telefone2Fisioterapeuta1";
                f2.RG = "RgFisioterapeuta1";
                f2.SalarioHora = 20;
                f2.TipoFuncionario = 1;
                f2.DataCadastro = DateTime.Now;
                f2.Ativo = true;

                SerializedMedico funcionario2 = new SerializedMedico(f2);

                //Cadastro de fisioterapeuta
                sc.CadastrarFisioterapeuta(1, "Fisioterapeuta1", "CpfFisioterapeuta1", "EnderecoFisioterapeuta1", "CidadeFisioterapeuta1", "EstadoFisioterapeuta1", "Telefone1Fisioterapeuta1", "Telefone2Fisioterapeuta1", "RgFisioterapeuta1", 20);


                //Listar fisioterapeuta cadastrado
                var listaFisioterapeutas = sc.VisualizarFisioterapeutas();
                if (listaFisioterapeutas.Last().Nome == "Fisioterapeuta1" &&
                    listaFisioterapeutas.Last().IdDepartamento == 1 &&
                    listaFisioterapeutas.Last().CPF == "CpfFisioterapeuta1" &&
                    listaFisioterapeutas.Last().Endereco == "EnderecoFisioterapeuta1" &&
                    listaFisioterapeutas.Last().Cidade == "CidadeFisioterapeuta1" &&
                    listaFisioterapeutas.Last().Estado == "EstadoFisioterapeuta1" &&
                    listaFisioterapeutas.Last().Telefone1 == "Telefone1Fisioterapeuta1" &&
                    listaFisioterapeutas.Last().Telefone2 == "Telefone2Fisioterapeuta1" &&
                    listaFisioterapeutas.Last().RG == "RgFisioterapeuta1" &&
                    listaFisioterapeutas.Last().SalarioHora == 20 &&
                    listaFisioterapeutas.Last().Ativo == true)
                {
                    Console.WriteLine("Testando cadastrar fisioterapeuta - Método CadastrarFisioterapeuta()... OK");
                    Console.WriteLine("Testando listagem de fisioterapeuta - Método VisualizarFisioterapeuta()... OK");
                }
                else
                {
                    Console.WriteLine("ERRO: Método CadastrarFisioterapeuta()");
                    Console.WriteLine("ERRO: Método VisualizarFisioterapeuta()");
                }


                //criação do outro funcionario
                Funcionario f3 = new Funcionario();
                f3.IdDepartamento = 1;
                f3.Nome = "Outro1";
                f3.CPF = "CpfOutro1";
                f3.Endereco = "EnderecoOutro1";
                f3.Cidade = "CidadeOutro1";
                f3.Estado = "EstadoOutro1";
                f3.Telefone1 = "Telefone1Outro1";
                f3.Telefone2 = "Telefone2Outro1";
                f3.RG = "RgOutro1";
                f3.SalarioHora = 30;
                f3.TipoFuncionario = 2;
                f3.DataCadastro = DateTime.Now;
                f3.Ativo = true;

                SerializedMedico funcionario3 = new SerializedMedico(f3);

                //Cadastro de outro funcionario
                sc.CadastrarOutrosFuncionarios(1, "Outro1", "CpfOutro1", "EnderecoOutro1", "CidadeOutro1", "EstadoOutro1", "Telefone1Outro1", "Telefone2Outro1", "RgOutro1", 30);


                //Listar outro cadastrado
                var listaOutros = sc.VisualizarFuncionarios();
                if (listaOutros.Last().Nome == "Outro1" &&
                    listaOutros.Last().IdDepartamento == 1 &&
                    listaOutros.Last().CPF == "CpfOutro1" &&
                    listaOutros.Last().Endereco == "EnderecoOutro1" &&
                    listaOutros.Last().Cidade == "CidadeOutro1" &&
                    listaOutros.Last().Estado == "EstadoOutro1" &&
                    listaOutros.Last().Telefone1 == "Telefone1Outro1" &&
                    listaOutros.Last().Telefone2 == "Telefone2Outro1" &&
                    listaOutros.Last().RG == "RgOutro1" &&
                    listaOutros.Last().SalarioHora == 30 &&
                    listaOutros.Last().Ativo == true)
                {
                    Console.WriteLine("Testando cadastrar outros funcionários- Método CadastrarFuncionarios()... OK");
                    Console.WriteLine("Testando listagem de outros funcionários - Método VisualizarFuncionarios()... OK");
                }
                else
                {
                    Console.WriteLine("ERRO: Método CadastrarOutrosFuncionarios()");
                    Console.WriteLine("ERRO: Método VisualizarFuncionarios()");
                }

             }

        }

        public void InicialiarBD() {

            var context = new DataClasses1DataContext();
            context.Funcionarios.DeleteAllOnSubmit(context.Funcionarios);
            Departamento departamento = new Departamento();
            departamento.Nome = "Departamento1";
            context.Departamentos.InsertOnSubmit(departamento);
        }

    }
}
